package com.dimples.dd.mybatis.core.type;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;

import java.util.HashSet;
import java.util.List;

/**
 * 参考 {@link com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler} 实现
 * 在我们将字符串反序列化为 Set 并且泛型为 Long 时，如果每个元素的数值太小，会被处理成 Integer 类型，导致可能存在隐性的 BUG。
 * <p>
 * 例如说哦，SystemUsersDO 的 postIds 属性
 *
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2024/7/8
 */

public class JsonLongSetTypeHandler extends AbstractJsonTypeHandler<Object> {

    @Override
    protected Object parse(String json) {
        List<Long> longList = JSONUtil.toList(json, Long.class);
        return CollUtil.isNotEmpty(longList) ? new HashSet<>(longList) : longList;
    }

    @Override
    protected String toJson(Object obj) {
        return JSONUtil.toJsonStr(obj);
    }

}
